package goft

import (
	"gopkg.in/yaml.v2"
	"log"
)

/**
ConfigMap  非独立配置 放入map
*/
type ConfigMap map[interface{}]interface{}

/**
ServerConfig server配置
*/
type ServerConfig struct {
	Port int32
	Name string
	Html string
}

type SysConfig struct {
	Server *ServerConfig //server配置
	Config ConfigMap     //自定义配置
}

func NewSysConfig() *SysConfig {
	return &SysConfig{Server: &ServerConfig{Port: 8080, Name: "web", Html: ""}}
}

func InitConfig() *SysConfig {
	//通过yaml 获取配置
	config := NewSysConfig()
	if b := LoadConfigFile(); b != nil {
		err := yaml.Unmarshal(b, config)
		if err != nil {
			log.Fatal(err)
		}
	}
	return config
}

/**
GetConfigValue 获取配置
*/
func GetConfigValue(m ConfigMap, prefix []string, index int) interface{} {
	//m 所有配置   prefix获取的配置  index 层级
	key := prefix[index]
	if v, ok := m[key]; ok {
		if index == len(m)-1 {
			return v
		} else {
			index++
			if mv, ok := v.(ConfigMap); ok {
				return GetConfigValue(mv, prefix, index)
			} else {
				return nil
			}
		}
	}
	return nil
}
